<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// [ 应用入口文件 ]
namespace think;

// 默认加载扩展,使用扩展完成框架加载
// 非常重要的一步,要充分认识这部分的作用
require __DIR__ . '/../vendor/autoload.php';

// 改变请求协议对象,可以自定义相关内容.在入口处调整就可以了.

// 实例化系统应用基础类
// 从容器中获取HTTP应用类think\Http ? 实现原理? IteratorAggregate 聚合式迭代器
// 执行HTTP应用并响应
// 初始一个 HTTP 对象
$http = (new App())->http;

$response = $http->run();

// 以下是关键部分,在哪触发?
//设置当前请求的控制器和操作名
//注册路由中间件
//绑定数据模型
//设置路由额外参数
//执行数据自动验证
//执行路由调度子类的exec方法返回响应think\Response对象
//获取当前请求的控制器对象实例
//利用反射机制注册控制器中间件
//执行控制器方法以及前后置中间件

// 指定入口名.其实就是 app 下的目录,多应用可用
// $response = $http->name('admin')->run();

// 对于非自动多应用部署的情况，如果要加载composer应用，需要在入口文件中设置应用路径
// $response = $http->path('path/to/app')->run();

// 执行当前响应对象的send方法输出
$response->send();

// 执行HTTP应用对象的end方法善后
$http->end($response);
